<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>functionality test of window.performance.clearMarks</title>
        <link rel="author" title="Intel" href="http://www.intel.com/" />
        <link rel="help" href="http://www.w3.org/TR/user-timing/#extensions-performance-interface"/>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
        <script src="/webperf/tests/resources/webperftestharness.js"></script>
        <script src="/webperf/tests/resources/webperftestharnessextension.js"></script>
        <script>
        setup({ explicit_done: true });

        function onload_test()
        {
            var context = new PerformanceContext(window.performance);
            var entrylist_checker = new performance_entrylist_checker("mark");
            var string_mark_names = mark_names.map(function (x) { return String(x)});
            mark_names.forEach(context.mark, context);

            for (var i = 0; i < mark_names.length; ++i)
            {
                context.clearMarks(mark_names[i]);
                var retained_entries = context.getEntriesByType('mark');
                var non_retained_entries = context.getEntriesByName(mark_names[i], 'mark');
                entrylist_checker.entrylist_check(retained_entries, mark_names.length - i - 1, string_mark_names);
                test_equals(non_retained_entries.length, 0, 'Marks that we cleared should not exist anymore.');
            }

            mark_names.forEach(context.mark, context);
            context.clearMarks();
            test_equals(context.getEntriesByType('mark').length, 0, 'No marks should exist after we clear all.');

            // Following cases test clear existed mark name that is tied for two times.
            mark_names.forEach(context.mark, context);
            mark_names.forEach(context.mark, context);

            for (var i = 0; i < mark_names.length; ++i)
            {
                context.clearMarks(mark_names[i]);
                var retained_entries = context.getEntriesByType('mark');
                var non_retained_entries = context.getEntriesByName(mark_names[i], 'mark');
                entrylist_checker.entrylist_check(retained_entries, (mark_names.length - i - 1) * 2, string_mark_names);
                test_equals(non_retained_entries.length, 0, 'Marks that we cleared should not exist anymore.');
            }

            // Following cases test clear functionality when mark names are tied for two times. 
            mark_names.forEach(context.mark, context);
            mark_names.forEach(context.mark, context);
            var entry_number_before_useless_clear = context.getEntriesByType('Mark').length;
            context.clearMarks('NonExist');
            var entry_number_after_useless_clear = context.getEntriesByType('Mark').length;
            test_equals(entry_number_before_useless_clear, entry_number_after_useless_clear, 'Nothing should happen if we clear a non-exist mark.');

            context.clearMarks();
            test_equals(context.getEntriesByType('mark').length, 0, 'No marks should exist when we clear all.');
            
            done();
        }
        </script>
    </head>
    <body onload=onload_test()>
        <h1>Description</h1>
        <p>This test validates functionality of the interface window.performance.clearMarks.</p>
        <div id="log"></div>
    </body>
</html>
